// 仓储调动
// 时间限制： 3000MS
// 内存限制： 65536KB
// 题目描述：
// 小程现在协助管理一个大型仓库。其中有非常多的货物。

// 现在来了很多运货车。每辆车只能装载一件货物，毫无疑问从经济的角度而言应该尽可能让这辆车满载。

// 当然，也可能出现这辆车无法承载货物的可能。例如如果此时仓库最轻货物是重量100的，而这辆车的承载能力是50，那无论如何都无法使得这辆车运输货物。

 

// 小程现在的打算是，每当一辆车过来，就尽量使得它满载。（注：满载允许货物重量等于承载能力，即若承载能力是50，可以载重重量为50的货物）

// 请注意：车是依次过来的，小程并不能事先预知所有的车的承载能力，只能尽量满足当前车。

// 你的任务是求出小程每次为这些车所选择的货物重量。



// 输入描述
// 第一行两个正整数n,m，分别表示仓库中的货物数量和前来的运货车数量。

// 第二行n组数据，表示n个货物的自身重量，以空格分隔。数据不保证有序。

// 第三行m组数据，按顺序给出每次前来的运货车的承载能力。

// 注意，数字间均有空格隔开。

// 输出描述
// 对于每个运货车，输出它所承载的货物重量；若这辆运货车无货可载，输出-1。每个输出之间以一个空格作为分隔。


#include<bits/stdc++.h>
using namespace std;

int main(int argc, char const *argv[])
{
    int n,m;
    while(cin>>n>>m){
        vector<int> item;
        vector<int> car;
        vector<int> res;
        for(int i=0;i<n;++i){
            int temp;
            cin>>temp;
            item.emplace_back(temp);
        }

        for(int i=0;i<m;++i){
            int temp;
            cin>>temp;
            car.emplace_back(temp);
        }

        sort(item.begin(),item.end());
        for(int i=0;i<car.size();++i){
            bool find=false;
            for(int j=item.size()-1;j>=0;--j){
                if(car[i]>=item[j]){
                    // cout<<car[i] <<" "<<item[j]<<endl;
                    res.emplace_back(item[j]);
                    item.erase(item.begin()+j);
                    find=true;
                    // cout<<"test"<<endl;
                    break;
                }
            }
            if(find==false){
                res.emplace_back(-1);
            }
        }
        cout<<res[0];
        for(int i=1;i<res.size();++i){
            cout<<" "<<res[i];
        }
        cout<<endl;
    }
    return 0;
}
